// Kludge in HTML5 tag recognition in IE8
document.createElement("section");
document.createElement("article");

(function () {
    if (!window.addEventListener) return;
    var pending = false, prevVal = null;

    function updateSoon() {
        if (!pending) {
            pending = true;
            setTimeout(update, 250);
        }
    }

    function update() {
        pending = false;
        var marks = document.getElementById("nav").getElementsByTagName("a"), found;
        for (var i = 0; i < marks.length; ++i) {
            var mark = marks[i], m;
            if (mark.getAttribute("data-default")) {
                if (found == null) found = i;
            } else if (m = mark.href.match(/#(.*)/)) {
                var ref = document.getElementById(m[1]);
                if (ref && ref.getBoundingClientRect().top < 50)
                    found = i;
            }
        }
        if (found != null && found != prevVal) {
            prevVal = found;
            var lis = document.getElementById("nav").getElementsByTagName("li");
            for (var i = 0; i < lis.length; ++i) lis[i].className = "";
            for (var i = 0; i < marks.length; ++i) {
                if (found == i) {
                    marks[i].className = "active";
                    for (var n = marks[i]; n; n = n.parentNode)
                        if (n.nodeName == "LI") n.className = "active";
                } else {
                    marks[i].className = "";
                }
            }
        }
    }

    window.addEventListener("scroll", updateSoon);
    window.addEventListener("load", updateSoon);
    window.addEventListener("hashchange", function () {
        setTimeout(function () {
            var hash = document.location.hash, found = null, m;
            var marks = document.getElementById("nav").getElementsByTagName("a");
            for (var i = 0; i < marks.length; i++)
                if ((m = marks[i].href.match(/(#.*)/)) && m[1] == hash) {
                    found = i;
                    break;
                }
            if (found != null) for (var i = 0; i < marks.length; i++)
                marks[i].className = i == found ? "active" : "";
        }, 300);
    });
})();
